package com.generator;//修改

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;

public class CodeGenerator {

    public static void main(String[] args) {

        // ================================
        // 一、数据库配置
        // ================================
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai";//！！修改
        String username = "root";
        String password = "mazheng1997";

        // ================================
        // 二、代码生成
        // ================================
        FastAutoGenerator.create(url, username, password)
                // ---------- 全局配置 ----------
                .globalConfig(builder -> {
                    builder.author("mz") // 作者名
                            .enableSwagger() // 开启 Swagger 模式
                            .disableOpenDir() // 生成后不打开目录
                            .outputDir(System.getProperty("user.dir") + "/module/src/main/java"); // 输出路径
                })

                // ---------- 包配置 ----------
                .packageConfig(builder -> {
                    builder.parent("com.generator") // 父包路径  ！！修改
                            .moduleName("module") // 模块名
                            .entity("entity") // 实体类包名
                            .mapper("mapper")
                            .service("service")
                            .xml("mapper.xml")
                            // 自定义 mapper.xml 输出路径
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    System.getProperty("user.dir") + "/module/src/main/resources/mapper"));
                })

                // ---------- 策略配置 ----------
                .strategyConfig(builder -> {
                    builder.addInclude("student") // 表名！！修改
                            .addTablePrefix("t_", "sys_"); // 去除表前缀

                    // 实体类策略
                    builder.entityBuilder()
                            .enableLombok() // 启用 Lombok
                            .enableTableFieldAnnotation() // 字段加 @TableField 注解
                            .naming(NamingStrategy.underline_to_camel)
                            .columnNaming(NamingStrategy.underline_to_camel)
                            .logicDeleteColumnName("is_deleted") // 逻辑删除字段
                            .versionColumnName("version") // 乐观锁字段
                            .enableFileOverride()
                            .formatFileName("%s"); // 实体类命名

                    // Mapper 策略
                    builder.mapperBuilder()
                            .enableMapperAnnotation()
                            .enableBaseResultMap()
                            .enableBaseColumnList()
                            .formatMapperFileName("%sMapper")
                            .enableFileOverride()
                            .formatXmlFileName("%sMapper");

                    // Service 策略
                    builder.serviceBuilder()
                            .formatServiceFileName("%sService")
                            .enableFileOverride();

//                    // ❌ 不生成 Controller
//                    builder.controllerBuilder().disable();
//
//                    // ❌ 不生成 ServiceImpl
//                    builder.serviceBuilder().disableServiceImpl();

                })

                // ---------- 注入配置（可选） ----------
                .injectionConfig(builder -> {
                    builder.beforeOutputFile((tableInfo, objectMap) -> {
                        System.out.println("准备生成文件：" + tableInfo.getEntityName());
                    });
                })

                // ---------- 模板引擎 ----------
                .templateEngine(new VelocityTemplateEngine())

                .templateConfig(builder -> {
                    // ✅ 禁用 Controller 模板
                    builder.disable(TemplateType.CONTROLLER);
                    // ✅ 禁用 ServiceImpl 模板（双重保险）
                    builder.disable(TemplateType.SERVICE_IMPL);
                })


                // ---------- 执行 ----------
                .execute();
    }
}
